//#include<atomic>
//
//class LockFreeQueue {
//private:
//	struct Node {
//		int val;
//		std::atomic<Node*> next;
//		Node():next(NULL){}
//	};
//	std::atomic<Node*> head;
//	std::atomic<Node*> tail;
//	std::atomic<Node*> empty = nullptr;
//
//public:
//	LockFreeQueue() {
//		head = new Node();
//		tail = head.load();
//	}
//
//	void push(int val) {
//		std::atomic<Node*> node = new Node();
//		node.load()->val = val;
//		
//		do {
//			Node* p = tail.load()->next;
//		} while (tail.load()->next.compare_exchange_strong(empty, node));
//	}
//
//
//};